package enumeration;

/**
 * 枚举类
 */
public class Enumeration {

    public static void main(String[] args) {
        System.out.println(Enum01.EXAMPLE);
        System.out.println(Enum02.EXAMPLE01);
    }
}

//通过自定义类实现枚举
class Enum01{

    private String name;

    private int num;

    //将构造器私有化，防止通过new方法创建对象
    private Enum01(String name, int num) {
        this.name = name;
        this.num = num;
    }

    //只创建get方法，不创建set方法，防止对象属性被修改
    public String getName() {
        return name;
    }

    public int getNum() {
        return num;
    }

    @Override
    public String toString() {
        return "Enum01{" +
                "name='" + name + '\'' +
                ", num=" + num +
                '}';
    }

    //定义静态变量，可以直接通过类名.变量名进行访问(static)
    //访问静态属性时会加载类信息，可以增加final修饰
    public final static Enum01 EXAMPLE = new Enum01("test",1);
}

//使用enum关键字实现枚举
enum Enum02{

    //在enum修饰的枚举类中，枚举对象要放在类的最前面
    //如果有多个枚举对象，则使用逗号隔开
    EXAMPLE01("test",1),
    EXAMPLE02("test",2);

    private String name;

    private int num;

    //enum关键字修饰类的构造器不需要private关键字进行私有化
    Enum02(String name, int num) {
        this.name = name;
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public int getNum() {
        return num;
    }

    @Override
    public String toString() {
        return "Enum02{" +
                "name='" + name + '\'' +
                ", num=" + num +
                '}';
    }

}

